Modern computing devices that are designed for graphical interactive use may have many applications installed for diverse purposes. Typically, each application has its own data. At times, users need to share data between applications on a device. While most operating systems provide inter-process communication (IPC) facilities to allow applications to directly share data, application-to-application IPC-based exchange of data is burdensome to program and lacks flexibility; each datatype exchanged may need its own custom programming. Consequently, most user-oriented operating systems include special system facilities or services to enable arbitrary applications to exchange data. Such cut-and-paste services include application programming interfaces (APIs), background processes to intermediate exchanges, class or container definitions, and other known elements. Applications programmed to use cut-and-paste may use the operating system facilities to indirectly exchange data, typically through a cut-paste buffer, a clipboard, pasteboard, or similar storage managed by the system. An application need only be programmed for the cut-and-paste API and it will then be able to exchange arbitrary data with arbitrary applications on the same device (or on other devices, in some cases).
The proliferation of applications has led to some shortcomings and previously unappreciated opportunities. For one, the proliferation of applications has led to a proliferation of datatypes. A clipboard, journal, or similar object-collecting application may accumulate a wide range of datatypes or objects with varying types of content. A data-exchange or cut-and-paste system may lead to a situation where many applications are able to exchange data but may not be able to conveniently understand each other's data. As only the inventors have observed, previously, intermediating software has served as a mere static collection and distribution point for inter-application data exchange. The ability for applications to actually exchange data has been limited; often, one application will not be able to consume journal or clipboard data provided by another application. Only the inventors have appreciated that there is an opportunity to improve inter-application data exchange via cut-and-paste-like systems by implementing a pasteboard or similar store to dynamically and intelligently curate the objects it receives.
In addition, only the inventors have appreciated that, often, applications for collecting arbitrary objects from other applications are used by users to accomplish specific tasks, pursue common topics or themes, etc. Journaling applications have not been implemented to provide higher level functionality such as synthesizing and analyzing content to infer user intent, topics of interest, etc. The inventors have appreciated that applications that collect heterogenous types of objects from other applications can be improved by adding intelligence to derive and act on high level conclusions about the content a user has added.
Furthermore, applications for collecting cut-and-paste data have failed to take advantage of machine learning and artificial intelligence (learning algorithms). Not only have such applications been designed to be mere static object-collecting tools, they have failed to take advantage of machine learning to enable higher level functionality as noted above.
Techniques related to improving inter-application exchange of objects are discussed below.